算法竞赛--输出GPLT (规律)

输出GPLT(该题与 字串是连续的 类似)

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按GPLTGPLT….这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入描述:

输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出描述:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

样例输入:

1
pcTclnGloRgLrtLhgljkLhGFauPewSKgt

样例输出:

1
GPLTGPLTGLTGLGLL

个人理解:

原本以为该题很复杂,后来想了想,分别统计出G,P,L,T,四个字符的个数,然后个数大于0的话,输出该字符就可以了。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <string.h>
char a[10005];
using namespace std;
int main()
{
cin>>a;
int len=strlen(a),b[5]={0,0,0,0},max=0;
char c[4]={'G','P','L','T'};
for(int i=0;i<len;i++) //分别统计G,P,L,T四个字符的数量,不区分大小写
{
if(a[i]=='g'||a[i]=='G')
b[0]++;
if(a[i]=='p'||a[i]=='P')
b[1]++;
if(a[i]=='l'||a[i]=='L')
b[2]++;
if(a[i]=='t'||a[i]=='T')
b[3]++;
}
for(int i=0;i<4;i++) //找出数量最大的字符,并记录其数量
if(b[i]>=max)
max=b[i];
while(max--) //输出
{
for(int i=0;i<4;i++)
{
if(b[i]>0)
{
cout<<c[i];
b[i]--;
}
}
}
cout<<endl;
return 0;
}
小礼物走一个哟
0%